package com.jarveis.dbs.core.filter;

import org.apache.log4j.Logger;

import com.jarveis.dbs.Constants;
import com.jarveis.frame.lang.StringUtil;
import com.jarveis.frame.redis.RedisUtil;
import com.jarveis.frame.util.Param;

/**
 * @desc token校验
 * @author liuguojun
 * @create 2017-07-19
 */
public class TokenFilter implements Filter {

	private Logger logger = Logger.getLogger(TokenFilter.class);

	public int init() {

		return 0;
	}

	public int filter(Param param) {

		String token = param.getHead().getString(Constants.LABEL_TOKEN);
		String tagName = param.getTagName();
		// token键名
		String tokenKey = Constants.REDIS_DEVICE + token;

		// 请求参数校验
		if (Param.REQ.equals(tagName)) {

			// 如果token不存在说明非法访问
			if (StringUtil.isEmpty(token)) {
				logger.info("token=" + token + ";客户端非法访问。");
				return Constants.ERROR_TOKEN;
			}

			// 如果token不存在
			boolean exists = RedisUtil.getKeys().exists(tokenKey);
			if (!exists) {
				return Constants.ERROR_TOKEN;
			}

			RedisUtil.getKeys().expired(tokenKey, Constants.REDIS_EXPIRED); // 设置token效期
		}

		if (Param.RESP.equals(tagName)) {
			// 如果token不存在说明非法访问
			if (StringUtil.isEmpty(token)) {
				logger.info("token=" + token + ";客户端非法访问。");
				return Constants.ERROR_TOKEN;
			}
			
			String userId = param.getBody().getString(Constants.LABEL_USERID);
			RedisUtil.getStrings().set(tokenKey, userId); // 绑定服务端与服务端访问标识

			RedisUtil.getKeys().expired(tokenKey, Constants.REDIS_EXPIRED); // 设置token效期
		}

		return 0;
	}

	public int destory() {

		return 0;
	}
}
